#include <iostream>
#include <unistd.h>
#include <ctime>
#include <pthread.h>
#include <cstring>
#include <string>
using namespace std;

//线程学习
const int NUM=10;


void * pthread_run1(void * args)
{

    const char*name=static_cast<const char*>(args);//（数据类型）强转常量和void*可以转其他不行
    int cnt=10;
    while(cnt--)
    {
        cout<<"thread1..."<< cnt <<"self id:"<<pthread_self()<<endl;
        sleep(1);
    }



    pthread_exit((void *)11);


}


int main()
{
    pthread_t tid;
    pthread_create(&tid,nullptr,pthread_run1,(void*)"thread 1");
    sleep(3);




    void *ret=nullptr;
    pthread_join(tid,&ret);  //void*  *ret  == ret取地址
    cout<<"new thread exit:"<<(int64_t)ret<<"quit thread :"<<tid<<endl;




    // pthread_cancel(tid);  
    //取消线程，为什么没有错误码？因为线程一但取消主线程就会导致进程结束
    //所以这个问题就让进程去做


    // pthread_t id[NUM];
    // for(int i=0;i<NUM;i++)
    // {
    //     char arr[128];
    //     snprintf(arr,128,"thread-%d",i+1);
    //     pthread_create(id+i,nullptr,pthread_run1,arr);//最后一个是传参

    // }

    // void * ret=nullptr;
    





    // //线程等待 pthread_join
    // for(int i=0;i<NUM;i++)
    // {
    //     // int n=pthread_join(id[i],nullptr);
    //     int n=pthread_join(id[i],&ret);
    //     if(n!=0)cerr<<"pthread_join error"<<endl;

    //     cout<<"thread quit"<<(int*)ret<<endl;
    // }

// ///////////////////////////////////////////////

// // sleep(5);
// // while(true)
// // {
// //     sleep(1);
// //     // cout<<"main thread..."<<endl;
// // }

//     return 0;
// }



    // void *ret = nullptr; // int a =  10

    // for(int i = 0 ; i< NUM; i++)
    // {
    //     int n = pthread_join(tids[i], &ret);
    //     if(n != 0) cerr << "pthread_join error" << endl;
    //     ThreadES *td = static_cast<ThreadES *>(ret);
    //     if(td->_status == OK)
    //     {
    //         cout << td->_name << " 计算的结果是: " << td->_res << " (它要计算的是[1, " << td->_top << "])" <<endl;
    //     }

    //     delete td;
    // }

    // cout << "all thread quit..." << endl;
    // return 0;
// }



}